﻿using CommunityToolkit.Mvvm.ComponentModel; // 需要基类 ObservableObject
using System.Collections.ObjectModel;
using System.Collections.Generic;
using Autodesk.Revit.DB.Architecture;

namespace RevitProject.SpaceManager.ViewModel.RoomViewModelPart
{
    /// <summary>
    /// 分类树节点的 ViewModel，手动实现属性。
    /// </summary>
    public partial class CategoryTreeNodeViewModel : ObservableObject // 保持 partial
    {
        // --- 手动实现属性 ---
        private string _displayName;
        public string DisplayName { get => _displayName; set => SetProperty(ref _displayName, value); }

        private bool _isExpanded;
        public bool IsExpanded { get => _isExpanded; set => SetProperty(ref _isExpanded, value); }

        private bool _isSelected;
        public bool IsSelected { get => _isSelected; set => SetProperty(ref _isSelected, value); }

        /// <summary>
        /// 获取一个值，指示此节点是否为叶节点（没有子节点）。
        /// </summary>
        public bool IsLeafNode => Children == null || Children.Count == 0;

        private int _totalRoomCount;

        /// <summary>
        /// 获取此节点及其所有子孙节点关联的房间总数。
        /// </summary>
        public int TotalRoomCount
        {
            get => _totalRoomCount;
            // Setter 设为 internal 或 private，防止外部随意修改，只通过计算方法更新
            internal set => SetProperty(ref _totalRoomCount, value);
        }

        /// <summary>
        /// 子节点集合。
        /// </summary>
        public ObservableCollection<CategoryTreeNodeViewModel> Children { get; set; } = new ObservableCollection<CategoryTreeNodeViewModel>();

        /// <summary>
        /// 直接关联到此节点的房间列表（不包括子节点）。
        /// </summary>
        public List<Room> AssociatedRooms { get; set; } = new List<Room>();

        /// <summary>
        /// 对父节点的引用。
        /// </summary>
        public CategoryTreeNodeViewModel Parent { get; set; }

        // *** 新增：用于标识特殊节点的标志 ***
        /// <summary>
        /// 获取或设置一个值，指示此节点是否是代表“全部房间”的总节点。
        /// </summary>
        public bool IsAllRoomsNode { get; set; } = false; // 默认为 false



        /// <summary>
        /// 构造函数。
        /// </summary>
        public CategoryTreeNodeViewModel(string displayName, CategoryTreeNodeViewModel parent = null)
        {
            // 使用 public 属性的 setter 赋值
            DisplayName = displayName;
            Parent = parent;
            IsExpanded = false; // 默认不展开
            IsSelected = false; // 默认不选中
            _totalRoomCount = 0; // 初始化房间计数
        }


        /// <summary>
        /// 递归获取此节点及其所有子孙节点关联的房间列表。
        /// (这个方法保持不变，用于 UpdateRoomList)
        /// </summary>
        public List<Room> GetAllRoomsInChildren()
        {
            // --- 注意：这里的逻辑和 TotalRoomCount 的计算逻辑不同 ---
            // GetAllRoomsInChildren 获取的是 Room 对象列表，用于 DataGrid
            // TotalRoomCount 获取的是 int 数量，用于 TreeView 显示
            // ----------------------------------------------------
            List<Room> allRooms = new List<Room>();

            // 特殊处理 "全部房间" 节点，直接返回其关联列表
            if (IsAllRoomsNode)
            {
                return new List<Room>(AssociatedRooms);
            }

            // 对于普通节点，添加自身的房间
            allRooms.AddRange(AssociatedRooms);

            // 递归添加子节点的房间
            foreach (var child in Children)
            {
                allRooms.AddRange(child.GetAllRoomsInChildren());
            }
            return allRooms;
        }
    }
}